using System;
using System.Diagnostics;
using ebcbinder;
using kinokasse.bauteile.contracts.BelegungenRepository;
using kinokasse.bauteile.contracts.SaalplanView;
using kinokasse.datamodel.contracts;

namespace kinokasse.Belegungen
{
    public interface IBelegungenAktualisieren
    {
        void In_ProcessVorstellung(Vorstellung vorstellung);
    }

    public class BelegungenAktualisieren : IBelegungenAktualisieren
    {
        private event Action<Vorstellung> in_ProcesVorstellung;

        public BelegungenAktualisieren(
            EbcBinder binder,
            IBuchungsRepository buchungsRepository,
            ISaalplanView saalplanView)
        {
            using(binder.BeginGroup(this)) {
                in_ProcesVorstellung += vorstellung => buchungsRepository.In_BuchungenErmitteln(
                    vorstellung, saalplanView.In_AktuelleBuchungen);
            }
        }

        public void In_ProcessVorstellung(Vorstellung vorstellung) {
            Trace.TraceInformation("In_ProcessVorstellung Vorstellung Id {0}", vorstellung.Id);
            in_ProcesVorstellung(vorstellung);
        }
    }
}